package com.helisa;

import android.app.ProgressDialog;

/**
 * La interfaz <code>RunnableProgress</code> debe ser implementada por
 * cualquier clase de la cual sus instancias estan intentando ejecutar un proceso 
 * y que deseen mostrar un <code>ProgressDialog</code> para mostrar en que estado
 * se encuentra el mismo. No especifica en que parte del progreso va.
 * La clase debe definir un metodo sin argumentos llamado
 * <code>runModified</code>.
 * <p>
 * El metodo <code>runModified</code> es ejecutado desde el metodo <code>run</code>
 * que es sobreescrito para la interfaz <code>Runnable</code>.
 * <p>
 * In addition, <code>Runnable</code> provides the means for a class to be
 * active while not subclassing <code>Thread</code>. A class that implements
 * <code>Runnable</code> can run without subclassing <code>Thread</code>
 * by instantiating a <code>Thread</code> instance and passing itself in
 * as the target.  In most cases, the <code>Runnable</code> interface should
 * be used if you are only planning to override the <code>run()</code>
 * method and no other <code>Thread</code> methods.
 * This is important because classes should not be subclassed
 * unless the programmer intends on modifying or enhancing the fundamental
 * behavior of the class.
 *
 * @author  Angie Milena Vega Leon
 * @version %I%, %G%
 * @see     java.lang.Thread
 * @see     java.util.concurrent.Callable
 * @since   JDK1.0
 */
public abstract class RunnableProgress implements Runnable{

	/**
	 * El ProgressDialog que se ha creado 
	 */
	protected ProgressDialog p;
	
	/**
	 * Inicializacion del ProgressDialog
	 * @param p ProgressDialog que se ha creado
	 */
	void setProgressDialog(ProgressDialog p){
		this.p = p;
	}
	
	/**
     * Cuando se implementa la interfaz <code>RunnableProgress</code> 
     * se usa un hilo en el que se ejecutara el proceso que se desea,
     * a traves del metodo <code>runModified</code> 
     */
	public abstract void runModified();
	
	 /**
     * When an object implementing interface <code>Runnable</code> is used 
     * to create a thread, starting the thread causes the object's 
     * <code>run</code> method to be called in that separately executing 
     * thread. 
     * <p>
     * The general contract of the method <code>run</code> is that it may 
     * take any action whatsoever.
     *
     * @see     java.lang.Thread#run()
     */
	public void run(){
		runModified();
		p.cancel();
	}
	
}
